/*
题目：交换链表中的节点
给你链表的头节点 head 和一个整数 k 。

交换 链表正数第 k 个节点和倒数第 k 个节点的值后，返回链表的头节点（链表 从 1 开始索引）。
 */
public class SwapNodes {
    public ListNode swapNodes(ListNode head, int k) {
        int len = 0;
        ListNode temp = head;
        while (temp != null) {
            temp = temp.next;
            len++;
        }
        //让指针跑到待交换节点的前一个位置
        int oneCnt = k - 1;
        int twoCnt = len - k;
        ListNode one = head;
        ListNode two = head;
        while (oneCnt != 0 || twoCnt != 0) {
            if (oneCnt != 0) {
                one = one.next;
                oneCnt--;
            }
            if (twoCnt != 0) {
                two = two.next;
                twoCnt--;
            }
        }
        int pivot = one.val;
        one.val = two.val;
        two.val = pivot;
        return head;
    }
}
